package cn.tedu._03vehicle.controller;

import cn.tedu._03vehicle.base.response.JsonResult;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Slf4j
@RestController
@Tag(name = "04-文件上传模块")
@RequestMapping("/v1/file/")
public class UploadController {
    @PostMapping("upload")
    public JsonResult upload(MultipartFile  file) throws IOException {
        /*
         1.接收客户端传递的数据【图片】
         2.将文件保存到服务器的指定目录【d:/files】
         3.返回响应
         */
        //***********终极目标：d:/files/2025/06/17/xxx.png
        //************************第1步处理文件名***********************
        //1.1源文件名filename:image.png
        String fileName = file.getOriginalFilename(); //获取原始文件名
        //1.2获取文件后缀：suffix：。png
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        //1.3生成全球唯一的文件名（UUID）:fc553009-701c-4dd0-affd-3b6b1cd61f9d
        UUID uuid = UUID.randomUUID();
        //1.4拼接完整的唯一文件名：fc553009-701c-4dd0-affd-3b6b1cd61f9d.png
        fileName = uuid + suffix;
        //************************第2步处理文件保存的路径***********************
        //2.1服务器静态资源路径
        String dirPath = "d:/files";
        //2.2自定义日期路径：/yyyy/MM/dd/
        SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");
        String datePath = sdf.format(new Date());
        //2.3创建对应的目录：d:/files/2025/06/17/
        File file1 = new File(dirPath + datePath); //创建目录
        if (!file1.exists()){ //判断目录是否存在
            file1.mkdirs(); //创建目录
        }
        //************************第3步保存文件到服务器******************
        String filePath = dirPath + datePath + fileName; //保存文件的绝对路径
        file.transferTo(new File(filePath));  //保存文件
        //************************第4步返回响应***********************
        //后端：{“state":2000,"message":"上传成功","data":"/2025/06/17/xxxx.jpg"}
        //前端：获取data的值，并在浏览器中显示该图片
        // http://localhost:8080/2025/06/17/xxxx.jpg
        return JsonResult.ok(datePath + fileName);
    }
}
